/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cz.hamacekj.geometr.plugin;

import java.util.Set;

/**
 * Třída, jejíž každá instance označuje jeden pojmenovaný objekt na nákresu.
 * @author hamacekh
 */
public interface ConstructionObject {
    
    /**
     * Vrátí jméno konkrétního objektu tak, jak bude použito v GUI.
     * Bude použito v popisu konstrukce. Pokud {@link #isLabelShown() isLabelShown()}
     * vrací true tak bude tímto jméno popsán objekt i v nákresu.
     * @return Jméno konkrétního objektu.
     */
    public abstract String getLabel();
    
    /**
     * Vrací hodnotu, jestli má být v nákresu zobrazen popisek.
     * @return true, pokud má být popisek zobrazen.
     */
    public boolean isLabelShown();
    
    /**
     * Vrátí seznam všech primitivních objektů, ze kterých je tento objekt sestaven.
     * Tento seznam je použit hlavně k vykreslování objektu a k výpočtům průniků.
     * @return Seznam primitivních objektů, ze kterých je tento vytvořen.
     */
    public abstract Set<PrimitiveObject> getPrimitiveObjects();
    
    
    /**
     * Vrací popisek, který bude zobrazen v kroku popisu konstrukce.
     * V popisku se můžou vyskytovat tagy pro zobrazení ikon objektů.
     * Tagy jsou ve formátu &lt;jmenoObjektu&gt; kde jmeno objektu je
     * {@link ConstructionPlugin#getPluginName() jmenem pluginu}.
     */
    public String getStepDescription();
}
